package com.zenithmind.chat.service.factory;

import com.zenithmind.chat.service.AiService;
import com.zenithmind.chat.enums.ModelType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * AI服务工厂类
 * 遵循开闭原则和依赖倒置原则
 * 负责根据模型类型创建对应的AI服务实例
 */
@Component
public class AiServiceFactory {
    
    private final Map<ModelType, AiService> aiServiceMap = new HashMap<>();
    
    @Autowired
    public AiServiceFactory(@Qualifier("openAiService") AiService openAiService,
                           @Qualifier("ollamaService") AiService ollamaService) {
        // 注册AI服务实例
        aiServiceMap.put(ModelType.OPENAI, openAiService);
        aiServiceMap.put(ModelType.OLLAMA, ollamaService);
        // 未来可以轻松添加新的AI服务，无需修改现有代码
    }
    
    /**
     * 根据模型类型获取对应的AI服务
     *
     * @param modelType 模型类型
     * @return AI服务实例
     * @throws IllegalArgumentException 如果模型类型不支持
     */
    public AiService getAiService(ModelType modelType) {
        AiService aiService = aiServiceMap.get(modelType);
        if (aiService == null) {
            throw new IllegalArgumentException("不支持的模型类型: " + modelType);
        }
        return aiService;
    }
    
    /**
     * 根据模型类型代码获取对应的AI服务
     *
     * @param modelTypeCode 模型类型代码
     * @return AI服务实例
     */
    public AiService getAiService(Integer modelTypeCode) {
        ModelType modelType = ModelType.fromCode(modelTypeCode);
        return getAiService(modelType);
    }
    
    /**
     * 注册新的AI服务
     * 支持运行时动态添加新的AI服务
     *
     * @param modelType 模型类型
     * @param aiService AI服务实例
     */
    public void registerAiService(ModelType modelType, AiService aiService) {
        aiServiceMap.put(modelType, aiService);
    }
    
    /**
     * 获取所有支持的模型类型
     *
     * @return 支持的模型类型集合
     */
    public java.util.Set<ModelType> getSupportedModelTypes() {
        return aiServiceMap.keySet();
    }
}
